iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
2
IoT

熟悉Arduino的Maker必看!30天帶你快速入門基於STM32嵌入式開發~系列 第 26

[Day 26]-【STM32系列】UART/USART TX 資料傳送篇(上)

  • 分享至 

  • xImage
  •  

在昨天的文章[Day 25]-【STM32系列】串列通訊的老祖宗:UART中我們稍微提到了關於UART的相關知識,如果有興趣的朋友們可以先去了解一下再來,那接續上一篇光用說的並不能解釋完全,所以今天我將實作UART傳輸部分,你可能會注意到有人寫UART/USART,甚麼是USART呢?其實就是UART的強化版!

UART:Universal Asynchronous Receiver/Transmitter,通用非同步收發傳輸器。
USART:Universal Synchronous/Asynchronous Receiver/Transmitter,通用同步非同步收發傳輸器。

從字面意思我們也可以知道USART比UART增加了一部分同步的功能,同步的意思指是否有透過clock,是同步收發器和異步收發器最大的區別,這取決於硬體的連接。也就是說我們可以拿USART來替代SPI當恰好缺少一個SPI串口的時候。SPI跟I²C、UART一樣也是一種通訊協定,我們改天再做一期文章來討論這個SPI。

回到我們今天的主題,UART 串列傳送分成三種模式:

  • 使用輪詢-> HAL_UART_Transmit
  • 使用中斷—> HAL_UART_Transmit_IT
  • 使用DMA-> HAL_UART_Transmit_DMA
  1. 輪詢(Polling):就是阻塞式詢問,CPU都不幹別的事了,就整天在那邊問你說:「現在有沒有要傳資料啊?」沒有要傳我就繼續等,總是在那邊詢問、等待。這種方最土法煉鋼、這就是輪詢的缺點,效率太低,占用cpu時間。

  2. 中斷(Interrupt):沒有收到數據時,執行其他的程序,收到數據後,進入中斷處理通訊。與輪詢相對來說,不用循環查詢狀態暫存器,可以有更多的時間運行其他程序。

  3. DMA(Direct Memory Access):直接記憶體存取。串列數據的接收與發送由DMA處理,DMA說:「我把接收、傳送的資料放在記憶體的某個位置,你如果需要就自己去那個位置提取」。DMA也可以分為輪詢與中斷方式。資料的發送與接收都不用CPU干預,通過DMA進行。 CPU有更多的時間運行其他程序。


Nucleo-64 boards (MB1136) - 6.8 USART communication

預設STM32微控制器的PA2(TX)和PA3(RX)上的USART2端口連接到 ST-LINK 燒錄器連接到你的電腦,代表只要開啟UART2並插上USB就可以與電腦連線,如果你想用UART2與其他擴充板通訊,可以將你Nucle開發板上SB62、SB63短路, SB13、SB14開路(原始狀態SB62、SB63開路, SB13、SB14短路)。

在這種情況下,可以將其他USART端口接到ST-LINK 燒錄器, 例如,在NUCLEO-L053R8上,可以使用PA2 (TX)和PA3(RX)上的USART2。 需要連接兩條跳線:

  • PA2(USART2_TX)在CN9 TX/D1 連接至 CN3 引腳 RX上
  • PA3(USART2_RX)在CN9 RX/D0 連接至 CN3 引腳 TX上

Hercules setup utility

這裡我再推一個軟體,hercules setup utility一個好用的Socket測試工具,我們將用它來接收、發送UART/USART數據,其實他還支援很多功能,例如:UDP/IP終端和TCP/IP客戶端和服務器終端,重點是他免費也好用,Win10目前也支援,算是一個老牌工具了。
請先官網下載:https://www.hw-group.com/software/hercules-setup-utility
https://ithelp.ithome.com.tw/upload/images/20201012/20120093fDSq7GwhGL.png



相關連結


結語

這是一個陰謀論...


上一篇
[Day 25]-【STM32系列】串列通訊的老祖宗:UART
下一篇
[Day 27]-【STM32系列】UART/USART RX 資料接收篇(下)
系列文
熟悉Arduino的Maker必看!30天帶你快速入門基於STM32嵌入式開發~30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言